<?php
/*

*/

class Tag
{
  private $nomTag;
  private $idRoot;
  private $hitTag;
  private $noteTag;
  private $more;
  public static $infoStats;

  /**
   * Constructeur de Tag
   *
   * @param string $nom nom du tag
   * @param int $idRoot id de la catégorie
   */  
  function __construct($nom, $idRoot=null, $hit=0)
  {
      $this->more = array();
    if(!$this->checkNom($nom))
      {
	throw new ListerException(24);
      }

    $this->nomTag = $nom;
    $sql = SQL::GetInstance();

    if(is_null($idRoot))
      {
	$infosTag     = $sql->getTag($nom);
	$this->idRoot = $infosTag['idRootTag'];
	$this->hitTag = $infosTag['hitTag'];
      }
    else
      {
	$this->idRoot = $idRoot;
	$this->hitTag = $hit;
      }

    if(!isset(self::$infoStats))
      {
	self::$infoStats = $sql->getStatsHitTag();
      }

    // Calcul de la note en fonction du nombre de hit du tag par rapport au nombre de hit total
    $min      = self::$infoStats['minHitTag'];
    $interval = self::$infoStats['maxHitTag'] - $min;
    if($interval <= 6)
      {
	$this->noteTag = 3;
      }
    else
      {
	$sinterval = round($interval / 6);
	$this->noteTag = 0;
	for($note = 1; $note < 6; $note++)
	  {
	    if($this->hitTag > ($min + $note * $sinterval))
	      {
		$this->noteTag = $note;
	      }
	  }
      }
              startPlugin('Tag___construct',$this);
  }
  
public function getNomTag()  {return $this->nomTag;}
public function getNoteTag() {return $this->noteTag;}
public function getHitTag()  {return $this->hitTag;}
public function getIdRoot()  {return $this->idRoot;}
public function getMore()    {return $this->more;}

public function setMore($more)       {$this->more    = array_merge($this->more,$more);}
public function setIdRoot($idRoot)   {$this->idRoot  = $idRoot;}
public function setNomTag($nomTag)   {$this->nomTag  = $nomTag;}
public function setHitTag($hitTag)   {$this->hitTag  = $hitTag;}
public function setNoteTag($noteTag) {$this->noteTag = $noteTag;}

  /**
   * Méthode qui enregistre le tag en base
   */
  function enregistrer()
  {
    $sql = SQL::GetInstance();
    if(! $sql->enregistrerTag($this->nomTag, $this->idRoot))
      {
	throw new ListerException(6, $this->nomTag);
      }         
       startPlugin('Tag_enregistrer',$this);
  }
  
  /**
   * Méthode qui change la catégorie du tag, en base et dans l'objet courant
   *
   * @param int $idRoot ID de la nouvelle catégorie pour le tag
   */
  function changerCategorie($idRoot)
  {
    $sql = SQL::GetInstance();
    if(! $sql->changerRootTag($this->nomTag, $idRoot))
      {
	throw new ListerException(7, $this->nomTag);
      }
    
    $this->idRoot = $idRoot;
           startPlugin('Tag_changerCategorie',$this);
  }

  /**
   * Méthode qui ajoute un hit au tag
   */
  public function ajouterHit()
  {
    $sql = SQL::GetInstance();
    if(! $sql->ajouterHit($this->nomTag))
      {
	throw new ListerException(7);
      }
             startPlugin('Tag_ajouterHit',$this);
  }
  
  /**
   * Méthode qui change le nom du tag, en base et dans l'objet courant
   *
   * @param string $nouvNom Nouveau nom pour le tag
   */
  function renommer($nouvNom)
  {
    if(!$this->checkNom($nouvNom))
      {
	throw new ListerException(24);
      }
    
    $sql = SQL::GetInstance();
    if(! $sql->renommerTag($this->nomTag, $nouvNom))
      {
	throw new ListerException(7, $this->nomTag);
      }
    
    $this->nomTag = $nouvNom;
           startPlugin('Tag_renommer',$this);
  }


  /**
   * Méthode qui vérifit que le nom est valide
   *
   * @param string nom le nom a vérifier
   * @return bool ok vrai si pas de probleme
   */
  private function checkNom($n)
  {
return (!ereg('[|\+|\'|"]', $n) && ""!=(trim($n)));	
    //return (!ereg('( |\+|\'|")', $n) && ""!=(trim($n)));
  }

  
  /**
   * Méthode qui supprime le tag en base
   */
  function supprimer()
  {
    $sql = SQL::GetInstance();
    if(! $sql->supprimerTag($this->nomTag))
      {
	throw new ListerException(8, $this->nomTag);
      }
          startPlugin('Tag_supprimer',$this);
  }
  
  /**
   * Méthode qui retourne un tableau avec les infos du tag, pour le template
   *
   * @return array $t Tableau contenant les infos du tag
   */
  function returnArray()
  {
    //--- regarder si le "+" n'est pas mieux que le array_merge
           startPlugin('Tag_returnArray',$this);
    return array_merge($this->more, array(
        'NOM_TAG'      => $this->nomTag,
	    'ID_ROOT_TAG'  => $this->idRoot,
	    'HIT_TAG'      => $this->hitTag,
        'NOTE_TAG'     => $this->noteTag,
        'ID_TAG'       => md5($this->nomTag)));
  }
}

?>
